import Dict from './Dict'
import { mergeOptions } from './DictOptions'

/**
 * 注册全局插件
 * @param {Vue} Vue - Vue 实例
 * @param {Object} options - 插件配置选项
 */
export default function (Vue, options) {
  // 合并配置选项
  mergeOptions(options)

  // 注册全局混入
  Vue.mixin({
    data() {
      // 检查是否定义了字典选项
      if (this.$options === undefined || this.$options.dicts === undefined || this.$options.dicts === null) {
        return {}
      }
      // 创建字典实例
      const dict = new Dict()
      dict.owner = this
      return {
        dict
      }
    },
    created() {
      // 检查字典实例是否存在
      if (!(this.dict instanceof Dict)) {
        return
      }
      // 调用配置的创建时回调函数
      options.onCreated && options.onCreated(this.dict)
      // 初始化字典数据
      this.dict.init(this.$options.dicts).then(() => {
        // 调用配置的就绪时回调函数
        options.onReady && options.onReady(this.dict)
        this.$nextTick(() => {
          // 发送字典就绪事件
          this.$emit('dictReady', this.dict)
          // 调用组件的字典就绪方法
          if (this.$options.methods && this.$options.methods.onDictReady instanceof Function) {
            this.$options.methods.onDictReady.call(this, this.dict)
          }
        })
      })
    },
  })
}
